#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
       
int main()
{   
    /*一般C库函数写入文件时是全缓冲的，而写入显示器是行缓冲。
    printf fwrite 库函数会自带缓冲区（进度条例子就可以说明），当发生重定向到普通文件时，数据
    的缓冲方式由行缓冲变成了全缓冲。
    而我们放在缓冲区中的数据，就不会被立即刷新，甚至fork之后
    但是进程退出之后，会统一刷新，写入文件当中。
    但是fork的时候，父子数据会发生写时拷贝，所以当你父进程准备刷新的时候，子进程也就有了同样的
    一份数据，随即产生两份数据。
    write 没有变化，说明没有所谓的缓冲*/
    //写文件是全缓冲，写显示器是行缓冲
    const char *msg0="hello printf\n";
    const char *msg1="hello fwrite\n";
    const char *msg2="hello write\n";
    printf("%s", msg0);
    fwrite(msg1, strlen(msg0), 1, stdout);
    write(1, msg2, strlen(msg2));
    fork();
    return 0;
}
